home *** CD-ROM | disk | FTP | other *** search
- *** ../../sipp-3.0/libsipp/rendering.c Sun May 3 08:19:12 1992
- --- rendering.c Wed Oct 7 15:57:45 1992
- ***************
- *** 46,51
- */
- static bool show_backfaces; /* Don't do backface culling */
- static bool shadows; /* Calculate shadows */
- static Edge **y_bucket; /* Y-bucket for edge lists. */
- static FILE *image_file; /* File to store image in */
- /* when rendering into a file. */
-
- --- 46,52 -----
- */
- static bool show_backfaces; /* Don't do backface culling */
- static bool shadows; /* Calculate shadows */
- + static bool reverse_scan; /* Render scan lines in reverse */
- static Edge **y_bucket; /* Y-bucket for edge lists. */
- static FILE *image_file; /* File to store image in */
- /* when rendering into a file. */
- ***************
- *** 226,232
-
- deltay = 1.0 / fabs(deltay);
-
- ! if (nderiv > 0) {
-
- /*
- * The edge has positive slope
-
- --- 227,234 -----
-
- deltay = 1.0 / fabs(deltay);
-
- ! if ((reverse_scan && nderiv <= 0) ||
- ! ((!reverse_scan) && nderiv > 0)) {
-
- /*
- * The edge has positive slope
- ***************
- *** 999,1005
- u_char *line;
- int curr_line;
- int scanline;
- ! int y, next_edge;
- Color *pixel_color;
- Color sum;
- int i, j, k;
-
- --- 1001,1007 -----
- u_char *line;
- int curr_line;
- int scanline;
- ! int y, next_edge, y_limit;
- Color *pixel_color;
- Color sum;
- int i, j, k;
- ***************
- *** 1038,1044
- }
- }
-
- ! y = yres - 1;
- active_list = NULL;
- curr_line = 0;
- scanline = 0;
-
- --- 1040,1054 -----
- }
- }
-
- ! if (reverse_scan) {
- ! y = 0;
- ! y_limit = yres;
- ! scanline = (yres - 1) * oversampl;
- ! } else {
- ! y = yres - 1;
- ! y_limit = -1;
- ! scanline = 0;
- ! }
- active_list = NULL;
- curr_line = 0;
-
- ***************
- *** 1041,1049
- y = yres - 1;
- active_list = NULL;
- curr_line = 0;
- - scanline = 0;
- -
- - while (y >= 0) {
-
- active_list = merge_edge_lists(active_list, y_bucket[y]);
- y_bucket[y] = NULL;
-
- --- 1051,1056 -----
- }
- active_list = NULL;
- curr_line = 0;
-
- while (y != y_limit) {
-
- ***************
- *** 1045,1050
-
- while (y >= 0) {
-
- active_list = merge_edge_lists(active_list, y_bucket[y]);
- y_bucket[y] = NULL;
- next_edge = y - 1;
-
- --- 1052,1059 -----
- active_list = NULL;
- curr_line = 0;
-
- + while (y != y_limit) {
- +
- active_list = merge_edge_lists(active_list, y_bucket[y]);
- y_bucket[y] = NULL;
-
- ***************
- *** 1047,1053
-
- active_list = merge_edge_lists(active_list, y_bucket[y]);
- y_bucket[y] = NULL;
- - next_edge = y - 1;
-
- while (next_edge >=0 && y_bucket[next_edge] == NULL)
- next_edge--;
-
- --- 1056,1061 -----
-
- active_list = merge_edge_lists(active_list, y_bucket[y]);
- y_bucket[y] = NULL;
-
- if (reverse_scan) {
- next_edge = y + 1;
- ***************
- *** 1049,1058
- y_bucket[y] = NULL;
- next_edge = y - 1;
-
- ! while (next_edge >=0 && y_bucket[next_edge] == NULL)
- ! next_edge--;
- ! while (y > next_edge) {
- !
- if (field == BOTH || (scanline & 1) == field) {
- buffer_clear(xres, linebuf[curr_line]);
- render_scanline(xres, linebuf[curr_line],
-
- --- 1057,1073 -----
- active_list = merge_edge_lists(active_list, y_bucket[y]);
- y_bucket[y] = NULL;
-
- ! if (reverse_scan) {
- ! next_edge = y + 1;
- ! while (next_edge < y_limit && y_bucket[next_edge] == NULL)
- ! next_edge++;
- ! } else {
- ! next_edge = y - 1;
- ! while (next_edge >= 0 && y_bucket[next_edge] == NULL)
- ! next_edge--;
- ! }
- ! while ((reverse_scan && (y < next_edge)) ||
- ! ((!reverse_scan) && (y > next_edge))) {
- if (field == BOTH || (scanline & 1) == field) {
- buffer_clear(xres, linebuf[curr_line]);
- render_scanline(xres, linebuf[curr_line],
- ***************
- *** 1096,1102
- }
-
- curr_line = 0;
- ! scanline++;
- }
-
- if (active_list != NULL) {
-
- --- 1111,1117 -----
- }
-
- curr_line = 0;
- ! scanline += reverse_scan ? -1 : 1;
- }
-
- if (active_list != NULL) {
- ***************
- *** 1104,1110
- edgep2 = active_list;
- edgep = active_list->next;
- while (edgep != NULL) {
- ! if (edgep->ystart <= (edgep->ystop + 1)) {
- edgep2->next = edgep->next;
- sfree(edgep);
- edgep = edgep2->next;
-
- --- 1119,1128 -----
- edgep2 = active_list;
- edgep = active_list->next;
- while (edgep != NULL) {
- ! if ((reverse_scan &&
- ! edgep->ystart >= (edgep->ystop - 1)) ||
- ! ((!reverse_scan) &&
- ! edgep->ystart <= (edgep->ystop + 1))) {
- edgep2->next = edgep->next;
- sfree(edgep);
- edgep = edgep2->next;
- ***************
- *** 1114,1120
- }
- }
-
- ! if (active_list->ystart <= (active_list->ystop + 1)) {
- edgep = active_list;
- active_list = active_list->next;
- sfree(edgep);
-
- --- 1132,1141 -----
- }
- }
-
- ! if ((reverse_scan &&
- ! active_list->ystart >= (active_list->ystop - 1)) ||
- ! ((!reverse_scan) &&
- ! active_list->ystart <= (active_list->ystop + 1))) {
- edgep = active_list;
- active_list = active_list->next;
- sfree(edgep);
- ***************
- *** 1122,1128
-
- edgep = active_list;
- while (edgep != NULL) {
- ! edgep->ystart--;
- edgep->xstart += edgep->xstep;
- edgep->hden += edgep->hdenstep;
- if (render_mode != FLAT) {
-
- --- 1143,1149 -----
-
- edgep = active_list;
- while (edgep != NULL) {
- ! edgep->ystart += reverse_scan ? 1 : -1;
- edgep->xstart += edgep->xstep;
- edgep->hden += edgep->hdenstep;
- if (render_mode != FLAT) {
- ***************
- *** 1138,1144
- edgep = edgep->next;
- }
- }
- ! y--;
- }
- }
- sfree(line);
-
- --- 1159,1165 -----
- edgep = edgep->next;
- }
- }
- ! y += reverse_scan ? 1 : -1;
- }
- }
- sfree(line);
- ***************
- *** 1353,1359
- {
- Edge *active_list;
- Edge *edgep, *edgep2;
- ! int y, next_edge;
-
- y = depthmap_size - 1;
- active_list = NULL;
-
- --- 1374,1380 -----
- {
- Edge *active_list;
- Edge *edgep, *edgep2;
- ! int y, next_edge, y_limit;
-
- if (reverse_scan) {
- y = 0;
- ***************
- *** 1355,1361
- Edge *edgep, *edgep2;
- int y, next_edge;
-
- ! y = depthmap_size - 1;
- active_list = NULL;
-
- while (y >= 0) {
-
- --- 1376,1388 -----
- Edge *edgep, *edgep2;
- int y, next_edge, y_limit;
-
- ! if (reverse_scan) {
- ! y = 0;
- ! y_limit = depthmap_size;
- ! } else {
- ! y = depthmap_size - 1;
- ! y_limit = -1;
- ! }
- active_list = NULL;
-
- while (y != y_limit) {
- ***************
- *** 1358,1364
- y = depthmap_size - 1;
- active_list = NULL;
-
- ! while (y >= 0) {
-
- active_list = merge_edge_lists(active_list, y_bucket[y]);
- y_bucket[y] = NULL;
-
- --- 1385,1391 -----
- }
- active_list = NULL;
-
- ! while (y != y_limit) {
-
- active_list = merge_edge_lists(active_list, y_bucket[y]);
- y_bucket[y] = NULL;
- ***************
- *** 1364,1371
- y_bucket[y] = NULL;
- next_edge = y - 1;
-
- ! while (next_edge >=0 && y_bucket[next_edge] == NULL)
- ! next_edge--;
-
- while (y > next_edge) {
-
-
- --- 1391,1405 -----
- y_bucket[y] = NULL;
- next_edge = y - 1;
-
- ! if (reverse_scan) {
- ! next_edge = y + 1;
- ! while (next_edge < y_limit && y_bucket[next_edge] == NULL)
- ! next_edge++;
- ! } else {
- ! next_edge = y - 1;
- ! while (next_edge >= 0 && y_bucket[next_edge] == NULL)
- ! next_edge--;
- ! }
-
- while ((reverse_scan && (y < next_edge)) ||
- ((!reverse_scan) && (y > next_edge))) {
- ***************
- *** 1367,1373
- while (next_edge >=0 && y_bucket[next_edge] == NULL)
- next_edge--;
-
- ! while (y > next_edge) {
-
- render_dmap_line(d_map + (depthmap_size - 1 - y) * depthmap_size,
- active_list);
-
- --- 1401,1408 -----
- next_edge--;
- }
-
- ! while ((reverse_scan && (y < next_edge)) ||
- ! ((!reverse_scan) && (y > next_edge))) {
-
- render_dmap_line(d_map + (depthmap_size - 1 - y) * depthmap_size,
- active_list);
- ***************
- *** 1377,1383
- edgep2 = active_list;
- edgep = active_list->next;
- while (edgep != NULL) {
- ! if (edgep->ystart <= (edgep->ystop + 1)) {
- edgep2->next = edgep->next;
- sfree(edgep);
- edgep = edgep2->next;
-
- --- 1412,1421 -----
- edgep2 = active_list;
- edgep = active_list->next;
- while (edgep != NULL) {
- ! if ((reverse_scan &&
- ! edgep->ystart >= (edgep->ystop - 1)) ||
- ! ((!reverse_scan) &&
- ! edgep->ystart <= (edgep->ystop + 1))) {
- edgep2->next = edgep->next;
- sfree(edgep);
- edgep = edgep2->next;
- ***************
- *** 1387,1393
- }
- }
-
- ! if (active_list->ystart <= (active_list->ystop + 1)) {
- edgep = active_list;
- active_list = active_list->next;
- sfree(edgep);
-
- --- 1425,1434 -----
- }
- }
-
- ! if ((reverse_scan &&
- ! active_list->ystart >= (active_list->ystop - 1)) ||
- ! ((!reverse_scan) &&
- ! active_list->ystart <= (active_list->ystop + 1))) {
- edgep = active_list;
- active_list = active_list->next;
- sfree(edgep);
- ***************
- *** 1395,1401
-
- edgep = active_list;
- while (edgep != NULL) {
- ! edgep->ystart--;
- edgep->xstart += edgep->xstep;
- edgep->hden += edgep->hdenstep;
- edgep = edgep->next;
-
- --- 1436,1442 -----
-
- edgep = active_list;
- while (edgep != NULL) {
- ! edgep->ystart += reverse_scan ? 1 : -1;
- edgep->xstart += edgep->xstep;
- edgep->hden += edgep->hdenstep;
- edgep = edgep->next;
- ***************
- *** 1401,1407
- edgep = edgep->next;
- }
- }
- ! y--;
- }
- }
- }
-
- --- 1442,1448 -----
- edgep = edgep->next;
- }
- }
- ! y += reverse_scan ? 1 : -1;
- }
- }
- }
- ***************
- *** 1591,1596
- /*============= Functions that handles global initializations==============*/
-
- /*
- * If called with TRUE as argument, no backface culling will
- * be performed. If a polygon is backfacing it will be rendered
- * as facing in the opposit direction.
-
- --- 1632,1648 -----
- /*============= Functions that handles global initializations==============*/
-
- /*
- + * If the argument is TRUE, render the scanlines in reverse.
- + */
- + void
- + sipp_render_direction (flag)
- + bool flag;
- + {
- + reverse_scan = flag;
- + /* reverse_scan = FALSE; /**/
- + }
- +
- + /*
- * If called with TRUE as argument, no backface culling will
- * be performed. If a polygon is backfacing it will be rendered
- * as facing in the opposit direction.
- ***************
- *** 1648,1652
- camera_init();
- sipp_show_backfaces(FALSE);
- sipp_shadows(FALSE, 0);
- sipp_background(0.0, 0.0, 0.0);
- }
-
- --- 1700,1705 -----
- camera_init();
- sipp_show_backfaces(FALSE);
- sipp_shadows(FALSE, 0);
- + sipp_render_direction(FALSE);
- sipp_background(0.0, 0.0, 0.0);
- }
-